package com.huluobo.mvvm.net;

import com.huluobo.mvvm.baen.BannerBeanResult;
import com.huluobo.mvvm.baen.CommentBeanResult;
import com.huluobo.mvvm.baen.FollowLikeBeanResult;
import com.huluobo.mvvm.baen.GiftBeanResult;
import com.huluobo.mvvm.baen.GoodsBeanResult;
import com.huluobo.mvvm.baen.LoveVideoBeanResult;
import com.huluobo.mvvm.baen.PushBeanResult;
import com.huluobo.mvvm.baen.SettingBean;
import com.huluobo.mvvm.baen.StopPushBeanResult;
import com.huluobo.mvvm.baen.UserBeanResult;
import com.huluobo.mvvm.baen.VideoBeanResult;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Query;

/**
 * Created by LC on 2023/9/14.
 * 存放所有的接口地址,返回是一个Observable
 */
public interface ApiService {
    @POST(Constant.URL_LOGIN)
    Observable<UserBeanResult> login(@Query(Constant.PARAM_USERNAME) String username,
                                     @Query(Constant.PARAM_PASSWORD) String password);

    @POST(Constant.URL_LOGIN_JSON)
    Observable<UserBeanResult> loginJson(@Body RequestBody body);

    @POST(Constant.URL_REGISTER)
    Observable<UserBeanResult> register(@Body RequestBody body);

    @GET(Constant.URL_GET_VIDEO_LIST)
    Observable<VideoBeanResult> getVideoList(@Query(Constant.PARAM_CURRENT_PAGE) int currentPage,
                                             @Query(Constant.PARAM_PAGE_SIZE) int pageSize);

    @GET(Constant.URL_BANNER)
    Observable<BannerBeanResult> getBanner();

    @GET(Constant.URL_GOODS_LIST)
    Observable<GoodsBeanResult> getGoodsList(@Query(Constant.PARAM_CATEGORY_ID) int categoryId,
                                             @Query(Constant.PARAM_CURRENT_PAGE) int currentPage,
                                             @Query(Constant.PARAM_PAGE_SIZE) int pageSize);

    //点赞
    @POST(Constant.URL_LIKE)
    Observable<FollowLikeBeanResult> likeVideo(@Query(Constant.PARAM_VIDEO_ID) int videoId);

    //取消点赞
    @POST(Constant.URL_NO_LIKE)
    Observable<FollowLikeBeanResult> noLikeVideo(@Query(Constant.PARAM_VIDEO_ID) int videoId);

    //关注
    @POST(Constant.URL_ADD)
    Observable<FollowLikeBeanResult> followAuth(@Query(Constant.PARAM_AUTHNAME) String authname);

    //发送评论
    @POST(Constant.URL_SEND_COMMENT)
    Observable<CommentBeanResult> sendComment(@Body RequestBody body);


    //获取评论列表
    @GET(Constant.URL_GET_COMMENT_LIST)
    Observable<CommentBeanResult> getCommentList(@Query(Constant.PARAM_VIDEO_ID) int videoId);

    @GET(Constant.URL_GIFT)
    Observable<GiftBeanResult> getGiftList();

    //设置相关的接口
    @POST(Constant.URL_UPDATE_ADDRESS)
    Observable<SettingBean> updateAddress(@Query(Constant.PARAM_ADDRESS) String address);

    @POST(Constant.URL_UPDATE_BRITH)
    Observable<SettingBean> updateBrith(@Query(Constant.PARAM_BRITH) String brith);

    //上传文件必须要有 Part 类似键值对,可以传递一个带key的文件到服务器
    @Multipart
    @POST(Constant.URL_UPDATE_ICON)
    Observable<SettingBean> updateIcon(@Part MultipartBody.Part part);

    @POST(Constant.URL_UPDATE_NICKNAME)
    Observable<SettingBean> updateNickname(@Query(Constant.PARAM_NICKNAME) String nickName);

    @POST(Constant.URL_UPDATE_SEX)
    Observable<SettingBean> updateSex(@Query(Constant.PARAM_SEX) String sex);

    @POST(Constant.URL_PUSH)
    Observable<PushBeanResult> push(@Query(Constant.PARAM_ADDRESS) String address,
                                    @Query(Constant.PARAM_CAPTION) String caption);

    @POST(Constant.URL_STOP_PUSH)
    Observable<StopPushBeanResult> stopPush();

    @POST(Constant.URL_LOVE_VIDEO)
    Observable<LoveVideoBeanResult> getLoveVideo();
}
